/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Helpers;

import entity.Mac;
import entity.MacPK;
import entity.Preferencia;
import entity.Usuario;
import java.math.BigInteger;
import java.text.DecimalFormat;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

/**
 *
 * @author Carito
 */
@Stateless
public class Dashboard_h implements Dashboard_hLocal {

    @PersistenceContext(unitName = "SAIE-ejbPU")
    private EntityManager em;
    
    public String RSA (String idEmpresa, String  user) 
    {
        Query q= em.createQuery("SELECT u FROM Usuario u WHERE u.usuario = :A"
                + "          AND u.usuarioPK.idempresa = :B       ");
        q.setParameter("A", user);
        q.setParameter("B", new BigInteger(idEmpresa) );
        
        Usuario u;
        try{
        u=(Usuario)q.getSingleResult();
        }catch(NoResultException e) {
        return -1+"";
         }
        
         DecimalFormat df = new DecimalFormat("0");
         String b=df.format(Math.random()*999999+1);
         
         Mac mac=new Mac("E88:3E:B6:00:A5:42",u.getUsuarioPK().getIdusuario(), u.getUsuarioPK().getIdempresa());
         mac.setRsa(new BigInteger(b));
         em.merge(mac);
         return b;
   
   
    }

    public Usuario Autenticar ( String idEmpresa, String user, String contrasena,
                                String mac, String token)
    {
        Query q= em.createQuery("SELECT u FROM Usuario u WHERE u.usuario = :A"
                + "          AND u.usuarioPK.idempresa = :B   "
                + "          AND u.contrasena = :C    ");
        q.setParameter("A", user);
        q.setParameter("B", new BigInteger(idEmpresa) );
        q.setParameter("C", contrasena);
        
        Usuario u;
        try{
        u=(Usuario)q.getSingleResult();
        }catch(NoResultException e) {
        return null;
         }
        
         Mac omac= new Mac(mac, u.getUsuarioPK().getIdusuario(), new BigInteger(idEmpresa));
        omac.setRsa(new BigInteger(token));
         
         //--Si no existe la Mac asociada creela
      
        Mac macBD=em.find(Mac.class, omac.getMacPK());
        if (macBD==null)
        {
           return null;
        }
        if (macBD.getRsa().compareTo(omac.getRsa())!=0)
            return null;
        
       return u;
    }

    @Override
    public List<Preferencia> getPreferencias(String idEmpresa, String user) {
        
        Query q1= em.createQuery("SELECT u FROM Usuario u WHERE u.usuario = :A"
                               + " AND u.usuarioPK.idempresa = :B       ");
        q1.setParameter("A", user);
        q1.setParameter("B", new BigInteger(idEmpresa) );
        
        Usuario u;
        try{
        u=(Usuario)q1.getSingleResult();
        }catch(NoResultException e) {
        return null;
         }
        
       Query q= em.createQuery("SELECT p FROM Preferencia p WHERE p.preferenciaPK.idusuario = :A"
                + "  AND p.preferenciaPK.idempresa = :B" );
        q.setParameter("A", u.getUsuarioPK().getIdusuario());
        q.setParameter("B", new BigInteger(idEmpresa) );
       
       List <Preferencia> list;
        try{
         list=(List <Preferencia>)q.getResultList();
        }catch(NoResultException e) {
        return null;
         }
        
        return list;
    }
    
    //--Returning String
   
      public String Autenticars ( String idEmpresa, String user, String contrasena,
                                String mac, String token)
    {
        Query q= em.createQuery("SELECT u FROM Usuario u WHERE u.usuario = :A"
                + "          AND u.usuarioPK.idempresa = :B   ");
                
        q.setParameter("A", user);
        q.setParameter("B", new BigInteger(idEmpresa) );
        
        
        Usuario u;
        try{
            u=(Usuario)q.getSingleResult();
            if (contrasena.equals(u.getContrasena())) {
                u.setIntentos(0);
            }
            else {
                u.setIntentos(u.getIntentos()+1);
            }
            
            if (u.getIntentos()>=5) {
                u.setBloqueado(Boolean.TRUE);
                return ""+-2;
            }
        }
        catch(NoResultException e) {
        return ""+-1;
         }
        
        Mac omac= new Mac(mac, u.getUsuarioPK().getIdusuario(), new BigInteger(idEmpresa));
        omac.setRsa(new BigInteger(token));
         
         //--Si no existe la Mac asociada creela
      
        Mac macBD=em.find(Mac.class, omac.getMacPK());
        if (macBD==null)
        {
           return ""+-1;
        }
        if (macBD.getRsa().compareTo(omac.getRsa())!=0)
            return ""+-1;;
        
       return ( u.getUsuarioPK().getIdusuario()+";"+
              u.getUsuario()+";"+ 
              u.getContrasena()+";"+ 
              u.getNombre()+";"+
              u.getSegundonombre()+";"+
              u.getProfesion()+";"+
              u.getEmail()+";"+
              u.getDireccion()+";"+
              u.getCargo()+";"+
              u.getNivelEducativo()+";"+
              u.getUsuarioPK().getIdempresa() );
              
               
    }    
      
    //ExPLE
    //https://201.245.160.252:8181/SAIE-war/resources/dashboard/preferenciass?empresa=1&usuario=cmartebu
    @Override
    public String getPreferenciass(String idEmpresa, String user) {
        
        Query q1= em.createQuery("SELECT u FROM Usuario u WHERE u.usuario = :A"
                               + " AND u.usuarioPK.idempresa = :B       ");
        q1.setParameter("A", user);
        q1.setParameter("B", new BigInteger(idEmpresa) );
        
        Usuario u;
        try{
        u=(Usuario)q1.getSingleResult();
        }catch(NoResultException e) {
        return -1+"";
         }
        
       Query q= em.createQuery("SELECT p FROM Preferencia p WHERE p.preferenciaPK.idusuario = :A"
                + "  AND p.preferenciaPK.idempresa = :B" );
        q.setParameter("A", u.getUsuarioPK().getIdusuario());
        q.setParameter("B", new BigInteger(idEmpresa) );
       
       List <Preferencia> list;
        try{
         list=(List <Preferencia>)q.getResultList();
        }catch(NoResultException e) {
        return -1+"";
         }
        
        String result="";
        
        for(Preferencia element: list)
        {
            result+=element.getPreferenciaPK().getIdpreferencia()+";"+
                   element.getPrioridad()+";"+
                   element.getIddato().getIddato()+";"+"_";
            
        }
        
        if (result.equalsIgnoreCase(""))
            return -1+"";
        return result;
    }
}
